package com.ruoyi.zxjd.work.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.zxjd.work.mapper.WorkTemplateMapper;
import com.ruoyi.zxjd.work.domain.WorkTemplate;
import com.ruoyi.zxjd.work.service.IWorkTemplateService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.BusinessException;

/**
 * 工作模板Service业务层处理
 * 
 * @author lcc
 * @date 2021-01-21
 */
@Service
public class WorkTemplateServiceImpl implements IWorkTemplateService 
{
    @Autowired
    private WorkTemplateMapper workTemplateMapper;

    /**
     * 查询工作模板
     * 
     * @param templateId 工作模板ID
     * @return 工作模板
     */
    @Override
    public WorkTemplate selectWorkTemplateById(Long templateId)
    {   
        return workTemplateMapper.selectWorkTemplateById(templateId);
    }

    /**
     * 查询工作模板列表
     * 
     * @param workTemplate 工作模板
     * @return 工作模板
     */
    @Override
    public List<WorkTemplate> selectWorkTemplateList(WorkTemplate workTemplate)
    {
        return workTemplateMapper.selectWorkTemplateList(workTemplate);
    }

    /**
     * 新增工作模板
     * 
     * @param workTemplate 工作模板
     * @return 结果
     */
    @Override
    public int insertWorkTemplate(WorkTemplate workTemplate)
    {
        workTemplate.setCreateBy(ShiroUtils.getLoginName());
        workTemplate.setCreateTime(DateUtils.getNowDate());
        workTemplate.setUpdateBy(ShiroUtils.getLoginName()); 
        workTemplate.setUpdateTime(DateUtils.getNowDate());
        return workTemplateMapper.insertWorkTemplate(workTemplate);
    }

    /**
     * 修改工作模板
     * 
     * @param workTemplate 工作模板
     * @return 结果
     */
    @Override
    public int updateWorkTemplate(WorkTemplate workTemplate)
    {
        String gatherFlag = workTemplate.getGatherFlag();
        String templateContent = workTemplate.getTemplateContent();
        if(StringUtils.isNotEmpty(templateContent)){
            //创建新表
            String createTableSql = "";
            StringBuilder stringBuilder = new StringBuilder().append("CREATE TABLE IF NOT EXISTS work_template_table").append(workTemplate.getTemplateId())
                .append(" ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',").append(" progress_id bigint(20) NOT NULL COMMENT '工作进度ID',");
            if("1".equals(gatherFlag)){
                JSONArray jsonArray = JSON.parseArray(templateContent).getJSONObject(0).getJSONArray("celldata");
                for (int i = 0; i < jsonArray.size(); i++) {
                    if (jsonArray.getJSONObject(i) != null) {
                        stringBuilder.append("val").append(i+1)
                            .append(" varchar(5) DEFAULT NULL,");
                    }
                }
            }else if("2".equals(gatherFlag)){
                JSONArray jsonArray = JSON.parseArray(templateContent).getJSONObject(0).getJSONArray("celldata");
                for (int i = 0; i < jsonArray.size(); i++) {
                    if (jsonArray.getJSONObject(i) != null) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        if("0".equals(jsonObject.getString("r"))){
                            stringBuilder.append("val").append(i+1)
                                .append(" varchar(10) DEFAULT NULL COMMENT '"+ jsonObject.getJSONObject("v").getString("v") + "',");
                        }
                    }
                }
            }else {
                JSONArray jsonArray = JSON.parseArray(templateContent).getJSONObject(0).getJSONArray("celldata");
                for (int i = 0; i < jsonArray.size(); i++) {
                    if (jsonArray.getJSONObject(i) != null) {
                        stringBuilder.append("val").append(i+1)
                            .append(" varchar(10) DEFAULT NULL,");
                    }
                }
            }
            stringBuilder.append("create_by varchar(64) DEFAULT '' COMMENT '创建者', create_time datetime DEFAULT NULL COMMENT '创建时间',update_by varchar(64) DEFAULT '' COMMENT '更新者', update_time datetime DEFAULT NULL COMMENT '更新时间', remark varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='"+ workTemplate.getTemplateName() +"';");
            createTableSql = stringBuilder.toString();
            workTemplateMapper.createTemplateTable(createTableSql);
        }
        workTemplate.setUpdateBy(ShiroUtils.getLoginName()); 
        workTemplate.setUpdateTime(DateUtils.getNowDate());
        return workTemplateMapper.updateWorkTemplate(workTemplate);
    }

    /**
     * 删除工作模板对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteWorkTemplateByIds(String ids)
    {
        Long[] templateIds = Convert.toLongArray(ids);
        for (Long templateId : templateIds) {
            WorkTemplate  workTemplate = workTemplateMapper.selectWorkTemplateById(templateId);
            if(templateId < 10){
                throw new BusinessException(String.format("%1$s是内置模板,不能删除", workTemplate.getTemplateName()));
            }
            if(checkTemplateUsed(templateId)){
                throw new BusinessException(String.format("%1$s已使用,不能删除", workTemplate.getTemplateName()));
            }
        }
        return workTemplateMapper.deleteWorkTemplateByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除工作模板信息
     * 
     * @param templateId 工作模板ID
     * @return 结果
     */
    @Override
    public int deleteWorkTemplateById(Long templateId)
    {
        return workTemplateMapper.deleteWorkTemplateById(templateId);
    }

    /**
     * 工作模板状态修改
     * 
     * @param user 工作模板信息
     * @return 结果
     */
    public int changeStatus(WorkTemplate workTemplate)
    {
        return workTemplateMapper.updateWorkTemplate(workTemplate);
    }

    /**
     * 查询工作模板列表
     * 
     * @param status 工作模板状态
     * @return 工作模板集合
     */
    public List<WorkTemplate> selectWorkTemplateListByStatus(String status)
    {
        return workTemplateMapper.selectWorkTemplateListByStatus(status);
    }

    /**
     * 查询工作模板是否使用
     * 
     * @param deptId 模板Id
     * @return 结果 true 已使用 false 未使用
     */
    private boolean checkTemplateUsed(Long templateId)
    {
        int result = workTemplateMapper.checkTemplateUsed(templateId);
        return result > 0 ? true : false;
    }
}
